A directory is a set of objects organized in a logical and hierarchical manner. A common example of a directory is a telephone directory, which consists of a series of names, e.g. of persons or organizations, organized alphabetically, with each name having an address and phone number attached. A directory can be regarded as a tree of entries also regarded as directory information tree, or simply directory tree, due to the fact that data is represented in a hierarchical tree-like structure. The data in a directory can be managed by directory services.
Modifications and queries in a directory can be made using application protocols like the Lightweight Directory Access Protocol (LDAP). LDAP is a directory service protocol running over the Transmission Control Protocol (TCP) and the Internet Protocol (IP), commonly known as TCP/IP. LDAP is based on a client-server model in which a client makes a TCP connection to an LDAP server, over which it sends requests and receives responses. One or more LDAP servers contain the data making up the LDAP directory. In case of a distributed directory, regardless of which LDAP server a client connects to, it has the same view of the directory; a name presented to an LDAP server references the same entry it would on another LDAP server.
The LDAP directory service model is based on entries. An entry is a collection of attributes that has a name, called a distinguished name, which refers to the entry unambiguously. Each of the entry's attributes has a type and one or more values. The types are typically mnemonic strings, like “en” for common name, or “mail” for email address. The values depend on the attribute type. In LDAP, directory entries are arranged in a hierarchical tree-like structure that can reflect e.g. geographic or organizational boundaries.
LDAP defines operations for interrogating and updating the directory. For example, operations are provided for adding and deleting an entry from the directory, changing an existing entry, and changing the name of an entry. LDAP is mostly used to search for information in the directory. The LDAP search operation allows a part of the directory to be searched for entries that match criteria specified by a search filter. Information can then be requested from an entry that matches the criteria.
The specification of the LDAP client source code interface described in “The C LDAP Application Program Interface, draft-ietf-Idapext-Idap-c-api-05.txt, 2000”, defines two kinds of operations on the LDAP Application Program Interface (API), instantiated by the provisioning of two groups of function calls, named “asynchronous” and “synchronous” function calls, respectively. Synchronous function calls block the application, e.g. a computer program, making a request to the directory and do not return to it until the LDAP server has served the request and returned a result. On the other hand, asynchronous functions return to the application as soon as the LDAP client processes the request, and the application can then continue its operation.
There are applications where a big number of requests have to be handled in a short time. For example in telecommunication applications there are cases when a lot of search requests have to be served. The operation of both synchronous and asynchronous functions has a drawback as they do not allow reaching the required throughput in such cases. This happens because regardless of which of the two functions are used, the processing of each request needs to first be finished by all protocol layers which are active in the process (LDAP, TCP/IP) before a next request can be sent. Moreover in the asynchronous case the application needs to regularly perform checks for determining when there are results coming from the server that need to be fetched.